home *** CD-ROM | disk | FTP | other *** search
- property spriteList, defaultList, downList, overList, greyList, activeList, myType, active, lastSprite, myDown, lastDown, downSound, upSound
-
- on new me, theSpriteList, theDefaultList, theCastName
- set spriteList to theSpriteList
- set defaultList to getMemberNumList(theDefaultList, theCastName)
- set active to 0
- set lastSprite to 0
- set myType to 1
- set myDown to 0
- set lastDown to 0
- set activeList to []
- repeat with i = 1 to count(spriteList)
- append(activeList, 1)
- end repeat
- return me
- end
-
- on setType me, theType
- case theType of
- "radio":
- set myType to 2
- "toggle":
- set myType to 3
- otherwise:
- set myType to 1
- end case
- end
-
- on setSound me, downSoundP, upSoundP
- set downSound to downSoundP
- set upSound to upSoundP
- end
-
- on setRadio me, index
- if myDown <> 0 then
- setActive(me, getOne(spriteList, myDown), 1)
- end if
- if index = 0 then
- set myDown to 0
- else
- set myDown to getOne(spriteList, index)
- end if
- set myDown to getOne(spriteList, myDown)
- if myDown <> 0 then
- setActive(me, index, 0)
- end if
- end
-
- on setState me, activeState
- puppetSprites(spriteList, activeState)
- if activeState then
- unsuspend(me)
- else
- suspend(me)
- end if
- end
-
- on suspend me
- set r to getOne(the actorList, me)
- if r > 0 then
- deleteAt(the actorList, r)
- end if
- set active to 0
- end
-
- on unsuspend me
- set r to getOne(the actorList, me)
- if r = 0 then
- append(the actorList, me)
- end if
- set active to 1
- update(me)
- end
-
- on setDownList me, theDownList, theCastName
- set downList to getMemberNumList(theDownList, theCastName)
- end
-
- on setOverList me, theOverList, theCastName
- set overList to getMemberNumList(theOverList, theCastName)
- end
-
- on setGreyList me, theGreyList, theCastName
- set greyList to getMemberNumList(theGreyList, theCastName)
- end
-
- on setActive me, index, state
- deleteAt(activeList, index)
- addAt(activeList, index, state)
- end
-
- on setGrey me, index, greyState
- setActive(me, index, not greyState)
- if greyState then
- swapSprite(getAt(spriteList, index), getAt(greyList, index))
- else
- swapSprite(getAt(spriteList, index), getAt(defaultList, index))
- end if
- updateStage()
- end
-
- on activeClick me
- if active then
- if lastDown = the clickOn then
- if getAt(activeList, getOne(spriteList, the clickOn)) then
- return 1
- else
- return 0
- end if
- end if
- else
- return 0
- end if
- end
-
- on update me
- repeat with i = 1 to count(activeList)
- if getAt(activeList, i) then
- swapSprite(getAt(spriteList, i), getAt(defaultList, i))
- next repeat
- end if
- if not voidp(greyList) then
- swapSprite(getAt(spriteList, i), getAt(greyList, i))
- end if
- end repeat
- if myType = 2 then
- if myDown <> 0 then
- swapSprite(myDown, getAt(downList, getOne(spriteList, myDown)))
- end if
- end if
- end
-
- on mMouseDown me
- set theSprite to the clickOn
- if theSprite <> lastSprite then
- mMouseExit(me, lastSprite, 0)
- end if
- set index to getOne(spriteList, theSprite)
- if getAt(activeList, index) then
- if myType = 2 then
- if myDown <> 0 then
- swapSprite(myDown, getAt(defaultList, getOne(spriteList, myDown)))
- setActive(me, getOne(spriteList, myDown), 1)
- end if
- set myDown to theSprite
- end if
- if not voidp(downList) then
- swapSprite(theSprite, getAt(downList, getOne(spriteList, theSprite)))
- end if
- if not voidp(downSound) then
- puppetSound(1, downSound)
- end if
- set lastSprite to theSprite
- set lastDown to theSprite
- end if
- updateStage()
- end
-
- on mMouseEnter me, theSprite
- if theSprite <> lastSprite then
- mMouseExit(me, lastSprite, 0)
- end if
- set index to getOne(spriteList, theSprite)
- if getAt(activeList, index) then
- if not voidp(overList) then
- swapSprite(theSprite, getAt(overList, getOne(spriteList, theSprite)))
- end if
- set lastSprite to theSprite
- end if
- updateStage()
- end
-
- on mMouseUp me
- set theSprite to the clickOn
- if theSprite <> lastSprite then
- mMouseExit(me, lastSprite, 0)
- end if
- set index to getOne(spriteList, theSprite)
- if myType = 2 then
- if myDown = theSprite then
- setActive(me, index, 0)
- end if
- end if
- if getAt(activeList, index) then
- if voidp(overList) then
- swapSprite(theSprite, getAt(defaultList, getOne(spriteList, theSprite)))
- else
- swapSprite(theSprite, getAt(overList, getOne(spriteList, theSprite)))
- end if
- if not voidp(upSound) then
- puppetSound(1, upSound)
- end if
- set lastSprite to theSprite
- end if
- updateStage()
- end
-
- on mMouseExit me, theSprite, update
- if myType = 2 then
- if myDown <> theSprite then
- if lastSprite > 0 then
- swapSprite(theSprite, getAt(defaultList, getOne(spriteList, theSprite)))
- end if
- end if
- else
- if theSprite > 0 then
- swapSprite(theSprite, getAt(defaultList, getOne(spriteList, theSprite)))
- end if
- end if
- set lastSprite to 0
- if update then
- updateStage()
- end if
- end
-
- on swapSprite theSprite, theMember
- if theSprite <> 0 then
- set the memberNum of sprite theSprite to theMember
- end if
- end
-
- on stepFrame me
- set r to rollOver()
- if getOne(spriteList, r) = 0 then
- mMouseExit(me, lastSprite, 1)
- else
- if the mouseDown then
- if lastSprite = r then
- nothing()
- else
- mMouseExit(me, lastSprite, 1)
- end if
- else
- if lastSprite = r then
- nothing()
- else
- mMouseEnter(me, r)
- end if
- end if
- end if
- end
-
- on puppetSprites theList, theState
- repeat with s in theList
- puppetSprite(s, theState)
- end repeat
- end
-
- on getMemberNumList theMemberList, theCastName
- set newList to []
- if voidp(theCastName) then
- repeat with n in theMemberList
- append(newList, the number of member n)
- end repeat
- else
- repeat with n in theMemberList
- append(newList, the number of member n of castLib theCastName)
- end repeat
- end if
- return newList
- end
-